package ln.javatest.day11.demo02;

import java.util.ArrayList;
import java.util.Iterator;

public class Demo01Generic {
    public static void main(String[] args) {
        show01();
        show02();
    }
    /*
    创建集合对象，不使用泛型
    好处：
        集合不适用泛型对象，默认类型Object类型，可以存储任意类型的数据
    弊端：
        不安全，会引发异常
    */
    public static void show01(){
        ArrayList list = new ArrayList();
        list.add("abc");
        list.add(1);
        //使用迭代器遍历list集合
        //获取迭代器
        Iterator it = list.iterator();
        //使用迭代器中的方法hasNext和next遍历集合
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);

            /*//想要使用String类特有的方法，length获取字符串的长度；不能使用  Object obj = "abc";
            //需要向下转型
            //会抛出ClassCastException类型转换异常，不能把Integer类型转换为String类型
            String s = (String) obj;
            System.out.println(s.length()); //3  1*/
        }


    }
    /*
    创建集合对象，使用泛型
    好处：
        1.避免了类型转换的麻烦，存储的是什么类型，取出的就是什么类型
        2.把运行期异常（代码运行之后会抛出的异常），提升到了编译期（写代码的时候回报错）
    弊端：
        泛型是什么类型，只能存储什么类型的数据
    */
    public static void show02(){
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
       //错误 list.add(1);

        //使用迭代器遍历list集合
        Iterator<String> it1 = list.iterator();
        while(it1.hasNext()){
            String s1 = it1.next();
            System.out.println(s1); //abc
        }
    }
}
